package com.clx.admin.service;


import cn.dev33.satoken.util.SaResult;
import com.clx.common.domain.dto.UpdateUserDto;
import com.clx.common.domain.entity.DiskUser;
import com.clx.common.domain.vo.AjaxResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 用户表(User)表服务接口
 *
 * @author clx
 * @since 2025-01-08 14:33:08
 */
public interface UserService {
    /**
     * 根据主键查询单个实体
     *
     * @param id 主键
     * @return 对应实体对象
     */
    DiskUser selectUserById(Long id);

    /**
     * 查询实体列表
     *
     * @param user 实体对象（可作为筛选条件）
     * @return 实体对象集合
     */
    List<DiskUser> selectUserList(DiskUser user);

    /**
     * 新增实体
     *
     * @param user 要新增的实体对象
     * @return 受影响的行数，新增成功通常返回1，失败返回0等
     */
    int insertUser(DiskUser user);

    /**
     * 修改实体
     *
     * @param user 要修改的实体对象
     * @return 受影响的行数，一般成功修改返回1
     */
    int updateUser(DiskUser user);

    /**
     * 批量删除实体
     *
     * @param ids 需要删除的实体主键数组
     * @return 受影响的行数，即成功删除的记录数
     */
    int deleteUserByIds(Long[] ids);

    /**
     * 删除单个实体（通过主键删除）
     *
     * @param id 主键
     * @return 受影响的行数，成功删除返回1
     */
    int deleteUserById(Long id);

    /**
     * 查询
     * @param user
     * @return
     */
    DiskUser selectByUser(DiskUser user);


    /**
     * 根据用户id返回用户信息
     */
    AjaxResult all(Long userId);



    /**
     * 上传用户头像
     * @param file
     * @return
     */
    String uploadAvatar(MultipartFile file);


    /**
     * 更新个人资料
     * @param updateUserDto
     * @return
     */
    AjaxResult updateUserDto(UpdateUserDto updateUserDto);
}
